/****************************************************************************** * Copyright (c) 2007 by System Helmholz GmbH. * * This software is copyrighted by and is the sole property of Systeme * Helmholz GmbH. All rights, title, ownership, or other interests in the * software remain the property of Systeme Helmholz GmbH. This software * may only be used in accordance with the corresponding license agreement. * Any unauthorized use, duplication, transmission, distribution, or * disclosure of this software is expressly forbidden. * * This Copyright notice may not be removed or modified without prior * written consent of Systeme Helmholz GmbH. * * Systeme Helmholz GmbH, reserves the right to modify this software * without notice. * * Systeme Helmholz GmbH Phone: +49 9135 7380 0 * Gewerbegebiet Ost 36 Fax: +49 9135 7380 50 * 91085 Weisendorf Web: http://www.helmholz.de * Germany Email: info@helmholz.de * ****************************************************************************** * * Projekt : NETLink PRO/USB for NetARM processor * Copyright: Systeme Helmholz GmbH * Author : Ehser * Version : 1.3 / 09.10.07 * File : netlink-js.htm * * * Javascript tool zum SteuernVariablen mit NETlink PRO */ var GERMAN = 0; var ENGLISH = 1; var language = GERMAN; var DOMAIN_TIMER = 14; var CYCLIC_INTERVAL = 500; // // errors from NETLink // var TARGET_BUFFER_TOO_SMALL = 1; var NETLINK_NOT_ONLINE_NO_RFC_MODE = 1001; var NETLINK_NOT_ONLINE = 1002; var NO_VALID_MPI = 1003; var OWN_MPI_NOT_ALLOWED = 1004; var MISSING_NETLINK_ELEMENT = 1008; var ERR_XON_NOT_ACCEPTED = 1010; var ERR_XML_BUFFER_TOO_SMALL = 1011; var ERR_RESULT_BUFFER_TOO_SMALL = 1012; var ERR_TOO_MUCH_VARS_IN_RESPONSE = 1013; var ERR_WEBORDER_FAILED = 1014; var ERR_COULD_NOT_SAVE_CONFIG = 1015; // // global NETLink states // var NETLINK_NOT_AVAILABLE = 0; var NETLINK_READY = 1; var NETLINK_BOOT = 2; var NETLINK_APP_START = 3; var NETLINK_SAVE_WLAN_CONF = 4; var NETLINK_WRITE_NVRAM = 5; var SAVE_WLAN_PARAMETER_OK = 6 var SAVE_WLAN_PARAMETER_FAILED = 7 var FORMAT_DEC = "dec"; var FORMAT_HEX = "hex"; var FORMAT_BIN = "bin"; var isIE = true; var table_caption_color = "#b0e0b0"; var g_ajax = null; var g_configuredMPI = "255"; var g_xmlConfig = ""; // DOM object of NETLink configuration var g_xmlReadOrder = ""; var cyclicActive = null; var toggle = false; var bWaitForResponse = false; var MAX_NO_OF_VARS = 10; var g_NoOfVariables = 0; // number of current variables configured var cnt_html_s7_variable_lines = 0; // number of current lines received var ID_DOMAIN = "id_domain_"; var ID_INDEX = "id_index_"; var ID_FORMAT = "id_format_"; var ID_VALUE = "id_value_"; var ID_DESCRIPTION = "id_descr_"; var arS7Types = new Array("output","output","output", "input","input","input", "flag","flag","flag", "data","data","data", "counter","timer"); var arS7Width = new Array("byte","word","dword", "byte","word","dword", "byte","word","dword", "byte","word","dword", "counter","timer"); var arVariableFormatInfo = new Array(MAX_NO_OF_VARS); var MAX_ENTRIES = 100; var trace_index = 0; var traceBuffer = new Array(MAX_ENTRIES+1); /** * createVariableLines(index) * * description: erzeugt dynamisch eine Tabellenzeile für eine S7 Variable * param: index: Zeilennummer um eindeutige IDs für die veränderbaren Elemente der Zeile zu erzeugen * */ function createVariableLines(index) { var html; var str; html = ' \n\n'; html += ' ' + index + '\n\n'; html += ' \n'; html += ' \n\n'; html += ' \n\n'; html += ' \n\n'; html += ' 0\n\n'; html += ' \n'; html += ' \n\n'; html += ' \n\n'; html += ' \n\n'; html += ' \n'; document.writeln(html); cnt_html_s7_variable_lines++; // count number of S7-Variable lines } // END createVariableLines(() /** Starten zyklisches 'Holen Variablen' */ function btnGetVariables(mode) { if (mode == "SAVE_CONFIG") { doWait(); sendCurrentConfiguration(true); // save configuration in NVRAM (takes some time) doNoWait(); return; } if (mode == "ONE_TIME") { if (bWaitForResponse == true) { return; // do nothing last read is still not back } stopCyclicRead(); sendCurrentConfiguration(false); makeReadOrder(); CyclicGetVariables(); return; } if (mode == "CYCLIC") { if (cyclicActive != null) { stopCyclicRead(); return; } sendCurrentConfiguration(false); makeReadOrder(); // // Button "holen" zu Button "anhalten" ändern + Farbe ändern // cyclicActive = window.setInterval("CyclicGetVariables()", CYCLIC_INTERVAL); setButton("Stop"); } } function CyclicGetVariables() { var xmlVariables; if (bWaitForResponse == true) { return; // do nothing last read is still not back } bWaitForResponse = true; askNETLink(g_xmlReadOrder, true); // askNETLink("/netlink/release/NetlinkRead.xml", true); } function setButton(buttonText) { buttonElement = document.getElementById("button_id"); if (buttonElement != null) { buttonElement.value = buttonText; if (cyclicActive == null) { buttonElement.style.backgroundColor = ""; } else { // buttonElement.style.backgroundColor = "#A0FFA0"; } } } /** */ function sendCurrentConfiguration(bSave) { var putConfigXML; var i; var html_id; var domain_value; var index_value; var format_value; var currentMpi; var currentSlot; var currentNoVars; var now = new Date(); var Tag = now.getDate(); var Monat = now.getMonth() + 1; var Jahr = now.getYear(); var Stunden = now.getHours(); var Minuten = now.getMinutes(); var Sekunden = now.getSeconds(); // auf 2-stellige Jahreszahl reduzieren if (isIE == true) { Jahr -= 2000; // internet explorer } else { Jahr -= 100; // firefox } Jahr = "0" + Jahr; Jahr = Jahr.substr(Jahr.length - 2,2); Monat = "0" + Monat; Monat = Monat.substr(Monat.length - 2); Tag = "0" + Tag; Tag = Tag.substr(Tag.length - 2); Stunden = "0" + Stunden; Stunden = Stunden.substr(Stunden.length - 2); Minuten = "0" + Minuten; Minuten = Minuten.substr(Minuten.length - 2); var date_time = "" + Jahr + Monat + Tag + Stunden + Minuten; currentMpi = getCurrentMpi(); currentSlot = getCurrentSlot(); currentNoVars = getNoOfVariables(); putConfigXML = "xmlRequest=\n"; putConfigXML += "\t " + html_id + " not found!" ); } html_id = ID_INDEX + i; htmlElement = document.getElementById(html_id); if (htmlElement != null) { index_value = htmlElement.value; } else { alert("sendCurrentConfiguration(): html-element -> " + html_id + " not found!" ); } html_id = ID_FORMAT + i; htmlElement = document.getElementById(html_id); if (htmlElement != null) { format_value = htmlElement.selectedIndex; } else { alert("sendCurrentConfiguration(): html-element -> " + html_id + " not found!" ); } html_id = ID_DESCRIPTION + i; htmlElement = document.getElementById(html_id); if (htmlElement != null) { descr_value = encodeURI(htmlElement.value); // encodeURI() wg. Umlaute } else { alert("sendCurrentConfiguration(): html-element -> " + html_id + " not found!" ); } putConfigXML += "\t\t\n"; putConfigXML += "\t\t\tdescr_value %3D \"" + descr_value + "\">\n"; putConfigXML += "\t\t\n"; } catch (errorInfo) { alert("sendCurrentConfiguration()->Exeption on line: " + i + "\nerrorInfo = " + errorInfo); break; // END loop } } // END for (i=0 .... putConfigXML += "\t\n"; putConfigXML += "\n"; askNETLink(putConfigXML, false); // send syncron! (asyncron = false) g_configuredMPI = currentMpi; } /** */ function makeReadOrder() { var i; var html_id; var var_tag; var domain_value; var index_value; var format_value; var currentMpi; currentMpi = getCurrentMpi(); currentSlot = getCurrentSlot(); g_xmlReadOrder = "xmlRequest=\n"; g_xmlReadOrder += "\t\n"; for (i=1;i " + html_id + " not found!" ); return; } html_id = ID_INDEX + i; htmlElement = document.getElementById(html_id); if (htmlElement != null) { index_value = htmlElement.value; } else { alert("makeReadOrder(): html-element -> " + html_id + " not found!" ); } html_id = ID_FORMAT + i; htmlElement = document.getElementById(html_id); if (htmlElement != null) { format_value = htmlElement.selectedIndex; } else { alert("makeReadOrder(): html-element -> " + html_id + " not found!" ); } g_xmlReadOrder += "\t\t<" + var_tag + "\n"; g_xmlReadOrder += "\t\t\thtml_id %3D \"" + i + "\"\n"; g_xmlReadOrder += "\t\t\ttype %3D \"" + var_type + "\"\n"; g_xmlReadOrder += "\t\t\tindex %3D \"" + index_value + "\"\n"; g_xmlReadOrder += "\t\t\tcount %3D \"1\"\n"; g_xmlReadOrder += "\t\t\n"; } catch (errorInfo) { alert("makeReadOrder()->Exeption on line: " + i + "\nerrorInfo = " + errorInfo); break; // END loop } } // END for (i=0 .... g_xmlReadOrder += "\t\n"; g_xmlReadOrder += "\n"; } /** */ function showS7Variables(xmlVariables) { var NetlinkChild; var i; bReturn = checkResponse("showS7Variables", xmlVariables); if (bReturn == true) { NetlinkChild = getElement(xmlVariables, "NETLink"); readNode = getElement(NetlinkChild, "read"); if (readNode.length > 0) { // look for Read-Child readVariables(readNode); } } else { stopCyclicRead(); } } /** */ function readVariables(ReadNode) { var VariableNodes; var NodeName; var var_id; var var_value; var var_formula; var var_type; var multiplikator; var timer_value; var minutes; var seconds; var milli_seconds; var htmlElement; var cnt_variables; var i; // // get variables values from received XML information // //debugger; VariableNodes = getChildElements(ReadNode, "*"); cnt_variables = VariableNodes.length; for (i=0;i 2) { var_formula = var_formula.replace(/x/i, var_value); var_value = eval(var_formula); } switch(NodeName) { case "counter": var_value = var_value/16; // counter values are decimal!! var_value = Math.round(var_value); break; case "timer": multiplikator = var_value & 0x3000; multiplikator >>= 12; timer_value = var_value & 0x0FFF; timer_value = (((timer_value & 0x0F00)>>8) * 100) + (((timer_value & 0x00F0)>>4) * 10) + (timer_value & 0x000F); // counter values are decimal!! timer_value = Math.round(timer_value); switch(multiplikator) { case 0: // 0,01 sec minutes = -1; seconds = Math.round(timer_value/100); milli_seconds = (timer_value % 100) * 10; break; case 1: // 0,1 sec minutes = -1; seconds = Math.round((timer_value-5)/10); if (seconds > 60) { minutes = Math.round((seconds-30)/60); seconds = (seconds % 60); } milli_seconds = (timer_value % 10) * 100; break; case 2: // 1 sec minutes = Math.round(timer_value/60);; seconds = timer_value % 60; milli_seconds = -1; break; case 3: // 10 sec minutes = Math.round((timer_value*10)/60);; seconds = (timer_value*10) % 60; milli_seconds = -1; break; default:; } break; } // // change html page according to the configuration values // read current format info from the html page // var_id = ID_FORMAT + var_no; htmlElement = document.getElementById(var_id); var_format = htmlElement.selectedIndex; var_format = htmlElement.options[htmlElement.selectedIndex].text; var_value_disp = getFormatedValue(var_value,var_format,var_no-1); if (NodeName == "timer") { // Timer has unique display format var_value_disp = ""; if (minutes > 0){ var_value_disp = minutes.toString(10) + "m"; } var_value_disp += seconds.toString(10) + "s"; if (milli_seconds >= 0){ var_value_disp += milli_seconds.toString(10) + "ms"; } } var_id = ID_VALUE + var_no; htmlElement = document.getElementById(var_id); htmlElement.firstChild.nodeValue = var_value_disp; } catch (errorInfo) { alert("readVariables() -> Exeption on line: " + i + "\nerrorInfo = " + errorInfo); break; // END loop } } // END for (i=0 .... } /** */ function updateFormat(line_no) { var var_id; var var_value; var var_value_text; var var_value_disp; var var_type; var html_id; var htmlElement; try { // get current value from HTML page html_id = ID_VALUE + line_no; htmlElement = document.getElementById(html_id); if (htmlElement != null) { var_value_text = htmlElement.firstChild.nodeValue; } else { alert("adjustToFormat(): html-element -> " + html_id + " not found!" ); return; } switch(arVariableFormatInfo[line_no-1]) { case FORMAT_HEX: // line_no is base 1 !!!! // current value is in hex var_value = parseInt(var_value_text,16); break; case FORMAT_DEC: // current value is decimal var_value = parseInt(var_value_text,10); break; case FORMAT_BIN: // current value is binary var reg_exp = / /g; var_value_text = var_value_text.replace(reg_exp,""); // remove spaces from binary value var_value = parseInt(var_value_text,2); break; } // // change html page according to the new format // var_id = ID_FORMAT + line_no; htmlElement = document.getElementById(var_id); var_format = htmlElement.selectedIndex; var_format = htmlElement.options[htmlElement.selectedIndex].text; // get the new format var_value_disp = getFormatedValue(var_value,var_format,line_no-1); var_id = ID_VALUE + line_no; htmlElement = document.getElementById(var_id); htmlElement.firstChild.nodeValue = var_value_disp; } catch (errorInfo) { alert("adjustToFormat() -> Exeption error = " + errorInfo); } } /** */ function getFormatedValue(var_value, var_format, line) { var id_index; var html_id; var domain_value; var var_type; var no_of_digits; var binValue; var len; var cnt; var start; var formated_value = ""; // default is empty status if (!isNaN(var_value)) // check if it is a Number { // // format the value as desired // id_index = line + 1; // base 1 html_id = ID_DOMAIN + id_index; htmlElement = document.getElementById(html_id); if (htmlElement != null) { domain_value = htmlElement.selectedIndex; var_type = arS7Width[domain_value-1]; // -1 = base 0 } switch(var_type) { case "byte": no_of_digits = 8; break; case "word": no_of_digits = 16; break; case "dword": no_of_digits = 32; break; default: no_of_digits = 16; } switch(var_format) { case FORMAT_HEX: formated_value = var_value.toString(16).toUpperCase(); formated_value = "00000000" + formated_value; formated_value = formated_value.substr(formated_value.length - (no_of_digits>>2)); formated_value = "0x" + formated_value; arVariableFormatInfo[line] = FORMAT_HEX; break; case FORMAT_BIN: binValue = var_value.toString(2); binValue = "00000000000000000000000000000000" + binValue; binValue = binValue.substr(binValue.length - no_of_digits); len = binValue.length; cnt = len/8; start = len % 8; formated_value += binValue.substr(0,start) + " "; for (i=0; i\"n"; getConfigXML += "\n"; // g_xmlConfig = askNETLink("/netlink/release/NetlinkConfig.xml"); // PC - Test Version g_xmlConfig = askNETLink(getConfigXML, false); // NETLink Version, send syncron! (asyncron = false) bWaitForResponse = false; // transfer ready NetlinkConfig = getElement(g_xmlConfig, "config"); if (NetlinkConfig.length > 0) { // configuration for "config" found // // get number of variables from received XML configuration // g_NoOfVariables = getAttribute(NetlinkConfig, "no_of_vars"); } } // END loadConfig() /** */ function getNetlinkState(cbFunction, command) { var NetlinkState; var getStateXML; var xmlState; setNetlinkStateFunction(cbFunction); getStateXML = "xmlRequest=\n"; getStateXML += "\n"; // ------------- TEST ------------------------------------ // xmlState = askNETLink("/netlink/wlan/NetlinkState.xml", false); // PC - Test Version , send syncron! (asyncron = false) // NETLinkCallBackHandler(xmlState); // ------------- TEST ------------------------------------ // xmlState = askNETLink("/netlink/release_en/NetlinkConfig.xml", false); // PC - Test Version , send syncron! (asyncron = false) xmlState = askNETLink(getStateXML, true); // NETLink State, send syncron! (asyncron = false) bWaitForResponse = false; // transfer ready } // END getNetlinkState() /** */ function initVariableLines() { var ip; var NetlinkChild; var lasNode; var configNode; var slot; var i; NetlinkChild = getElement(g_xmlConfig, "NETLink"); if (NetlinkChild.length > 0) { // lasNode = getElement(NetlinkChild, "las"); configureMPI(lasNode); configNode = getElement(NetlinkChild, "config"); if (configNode.length > 0) { // configuration for "config" found // // get mpi address from received XML configuration // mpi = getAttribute(configNode, "mpi_address"); selectOption("idMPIAddress", mpi) // // get slot from received XML configuration // slot = getAttribute(configNode, "slot"); setSlotValue(slot); configureNoOfVar(); configureS7Variables(configNode); } } } // END initVariableLines() /** */ function checkResponse(instance_name, xmlResponse) { var NetlinkChild; var error_no; var error_text; var iReturn = false; if (xmlResponse.length == 0) { return true; } NetlinkChild = getElement(xmlResponse, "NETLink"); if (NetlinkChild.length == 0) { alert("checkResponse(): " + instance_name + "-> missing root node 'NETLink')"); return iReturn; } NetlinkResponse = getElement(NetlinkChild, "response"); if (NetlinkResponse.length == 0) { alert("checkResponse(): " + instance_name + "-> no response element)"); return iReturn; } error_no = getAttribute(NetlinkResponse,"error_no"); var nbr = parseInt(error_no, 10); if (nbr == 0) { iReturn = true; } else { stopCyclicRead(); switch(nbr) { case TARGET_BUFFER_TOO_SMALL: alert("\nTarget buffer for creating S7 AnyPointers is too small. Use less variables.\n"); iReturn = false; break; case NETLINK_NOT_ONLINE_NO_RFC_MODE: alert("NETLink is not ONLINE!\n\nConfigure 'Go online after bootup'!"); iReturn = true; break; case NETLINK_NOT_ONLINE: alert("NETLink is not ONLINE!\n\nNo other active partner can be found."); iReturn = true; break; case NO_VALID_MPI: alert("\nThe selected MPI address is not valid.\n"); iReturn = false; break; case OWN_MPI_NOT_ALLOWED: alert("\nThe own MPI address cannot be used.\n"); iReturn = false; break; case MISSING_NETLINK_ELEMENT: alert("\nMissing XML-Element ''!\n"); iReturn = false; break; case ERR_XON_NOT_ACCEPTED: alert("\nNo successful XON (activating MPI connection). Maybe SAP of CPU not activated!\n"); iReturn = false; break; case ERR_XML_BUFFER_TOO_SMALL: alert("\nXML output buffer for response is too small. Use less variables. \n"); iReturn = false; break; case ERR_RESULT_BUFFER_TOO_SMALL: alert("\nResult buffer for Profibus response is too small.\n"); iReturn = false; break; case ERR_TOO_MUCH_VARS_IN_RESPONSE: alert("\nNumber of variables in CPU response are greater then the number of expected variables!\n"); iReturn = false; break; case ERR_WEBORDER_FAILED: alert("\nOrder could not be processed. (PLC communication failed!)\n"); iReturn = false; break; case ERR_COULD_NOT_SAVE_CONFIG: alert("\nCould not save configuration.\n"); iReturn = false; break; default: alert("checkResponse(): " + instance_name + "-> xmlResponse with error number: " + error_no); } } return iReturn; } /** */ function configureMPI(lasNode) { var value; var lasNode; var lasMPIs; var currSelected = 0; var mpiElement; var newText; // // address mpi-DOM-Element on html-page // mpiElement = document.getElementById("idMPIAddress"); optionElement = document.createElement("option"); mpiElement.appendChild(optionElement); // add empty option element as default // // get MPI info from received XML configuration // lasMPIs = getChildElements(lasNode, "mpi"); for (i=0;i g_NoOfVariables) { alert("Es wurden mehr Zeilen in der XML-Konfiguration definiert als angezeigt werden sollen!\n konfiguriert: " + cnt_configered_lines + "\n angezeigt: " + g_NoOfVariables); cnt_configered_lines = g_NoOfVariables; } for (i=0;i= "0") { mpiOption = MPIElement.options[MPIElement.value].text; } else { mpiOption = "255"; } return mpiOption; } function getCurrentSlot() { var current_slot; var htmlElement; htmlElement = document.getElementById("idSlot"); current_slot = htmlElement.value; return current_slot; } function setSlotValue(slot) { var htmlElement; htmlElement = document.getElementById("idSlot"); htmlElement.value = slot; return; } /** */ function getNoOfVariables() { var VariableElement; var varOption; var index; VariableElement = document.getElementById("idNoOfVar"); if (VariableElement.value > "0") { index = VariableElement.value - 1; varOption = VariableElement.options[index].text; } else { varOption = "255"; } return varOption; } /** */ function selectOption(ElementId, optionToSelect) { var htmlElement; var text; var value; var mask = "00"; var nNewOption; var nHtmlOption; optionToSelect = mask + optionToSelect; optionToSelect = optionToSelect.substr(1); htmlElement = document.getElementById(ElementId); if (htmlElement == null) { alert("selectOption(): ElementId = " + ElementId + " not found!"); return; } for (i = 0; i < htmlElement.length; ++i) { if (parseInt(htmlElement.options[i].text,10) == parseInt(optionToSelect,10)) { htmlElement.selectedIndex = i; } } } /** */ function lineChanged(line_no, column) { var wert; var variable; var LineElement; variable = column + line_no; LineElement = document.getElementById(variable); if (column == ID_DOMAIN) { var_domain = LineElement.selectedIndex; format_id = ID_FORMAT + line_no; if (var_domain == DOMAIN_TIMER) // is timer ? { document.getElementById(format_id).disabled = true; } else { document.getElementById(format_id).disabled = false; } } if (column == ID_FORMAT) { updateFormat(line_no); return; } //alert("line " + line_no + " changed to " + wert); //LineElement.selectedIndex = 7; stopCyclicRead(); } /** */ function MPIChanged() { var MPIElement = document.getElementById("idMPIAddress"); //alert("MPI changed! selected MPI address index = " + MPIElement.value + " selected MPI address value = " + MPIElement.options[MPIElement.value].text); stopCyclicRead(); } //--------------------- // //--------------------- function NETLinkAjax() { //Eigenschaften deklarieren und initialisieren this.url = ""; this.params = ""; this.response = ""; this.method = "POST"; this.onSuccess = null; this.onError = function (msg) { // alert(msg); }; this.xmlHttpRequest; this.more = "false"; this.more = "false"; this.cbResponse = null; this.cbState = null; //XMLHttpRequest-Objekt erstellen this.xmlHttpRequest = getXMLHttpRequest(); if (!this.xmlHttpRequest) { this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden."); return false; } } NETLinkAjax.prototype.doRequest = function (bAsyncron) { var antwortText; if (!this.url) { this.onError("Es wurde kein URL angegeben. Der Request wird abgebrochen."); return false; } if (!this.method) { this.method = "GET"; } else { this.method = this.method.toUpperCase(); } var _this = this; switch (this.method) { case "GET": this.xmlHttpRequest.open(this.method, this.url + "?" + this.params, bAsyncron/*asyncron*/); this.xmlHttpRequest.onreadystatechange = readyStateHandler; this.xmlHttpRequest.send(null); break; case "POST": this.xmlHttpRequest.open(this.method, this.url, bAsyncron /*asyncron*/); this.xmlHttpRequest.onreadystatechange = readyStateHandler; try{ this.xmlHttpRequest.send(this.params); } catch(e) { // catches "NS_ERROR_NOT_INITIALIZED", if there is no response from NETLink NETLinkCallBackHandler(createStateResponse(NETLINK_NOT_AVAILABLE), "", null); } break; } if (bAsyncron == false) { _this.response = this.xmlHttpRequest.responseText; } function readyStateHandler() { /* wird im "asyncron-Modus" aufgerufen!*/ try{ if (_this.xmlHttpRequest.readyState < 4 || _this.xmlHttpRequest.status == 403 || //3.07.10 eh: 'forbidden' (proxy) _this.xmlHttpRequest.status == 502) //3.07.10 eh: 'bad gateway' (proxy) { return false; } if (_this.xmlHttpRequest.status == 200 || _this.xmlHttpRequest.status == 305 || // _this.xmlHttpRequest.status == 4) //4.02.10 { NETLinkCallBackHandler(_this.xmlHttpRequest.responseText, _this.xmlHttpRequest.responseXML, _this); } else { if (_this.onError && (_this.xmlHttpRequest.status != 0)) { _this.onError("[" + _this.xmlHttpRequest.status + " " + _this.xmlHttpRequest.statusText + "] There occured an error during data transfer."); stopCyclicRead(); } } } catch(e) { // debugger; try{ NETLinkCallBackHandler(createStateResponse(NETLINK_NOT_AVAILABLE), "", null); } catch(e) { alert("readyStateHandler() 2. Stufe: catch e = " + e); } // alert("readyStateHandler(): catch e = " + e); } } }; // END prototype doRequest() //--------------------------------------- // NETLink Ajax Communication //--------------------------------------- function askNETLink(request_data, bAsyncron) { var NETLinkAnswer; var ajax_url = "/_NZZA_action_goNetlink"; var a = document.URL.split("/http"); /* if (a.length > 1) { ajax_url += "/http" + a[1]; } else { ajax_url += a; } */ if (g_ajax == null) { g_ajax = new NETLinkAjax(); // create the ajax communication object } g_ajax.url = ajax_url; g_ajax.method = "POST"; g_ajax.params = request_data; g_ajax.onError = AjaxShowError; g_ajax.doRequest(bAsyncron); NETLinkAnswer = g_ajax.response; return NETLinkAnswer; } // END //--------------------------------------- // NETLink Ajax Communication //--------------------------------------- function setNetlinkErrorResponseFunction(cbErrorResponse) { if (g_ajax == null) { g_ajax = new NETLinkAjax(); // create the ajax communication object } g_ajax.cbResponse = cbErrorResponse + "(x,y)"; // complete the function name and store it } //--------------------------------------- // NETLink Ajax Communication //--------------------------------------- function setNetlinkResponseFunction(cbResponse) { if (g_ajax == null) { g_ajax = new NETLinkAjax(); // create the ajax communication object } g_ajax.cbResponse = cbResponse; // set user defined response function } //--------------------------------------- // NETLink Ajax Communication //--------------------------------------- function setNetlinkStateFunction(cbState) { if (g_ajax == null) { g_ajax = new NETLinkAjax(); // create the ajax communication object } g_ajax.cbState = cbState; // store user callback function } /* */ function asbHasError(msg) { //Hat msg einen Inhalt? if (!msg) { return false; } //Befindet sich Zeichenkette AOEERROR: am Anfang von msg? if (msg.indexOf("ASBERROR:") == 0) { return true; } else { return false; } } //allgemeine Fehlerbehandlung function AjaxShowError(msg) { alert(msg); } //Aufbereiten der Fehlermeldung eines PHP-Skripts function asbGetError(msg) { //AOEERROR: aus Fehlermeldung entfernen return msg.replace(/ASBERROR:/, ""); } //allgemeine Fehlerbehandlung function asbLoadEntries() { // alert(msg); // dummy as long as we get data in syncronous mode!!! } var Try = {these:function () { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) { } } return returnValue; } } /** */ function NETLinkCallBackHandler(responseTXT, responseXML, ajax_object) { var NETLinkElement; var action; var state_no; var state_text; // // call user defined response function if it exists // if (ajax_object != null && ajax_object.cbResponse != null) { ajax_object.cbResponse(responseTXT); // call user callback function bWaitForResponse = false; // transfer ready return; } NETLinkElement = getElement(responseTXT, "NETLink"); action = getAttribute(NETLinkElement, "action"); switch(action) { case "error_response": // checkResponse("NETLinkCallBackHandler()", responseTXT); // break; case "get_config_response": // // is syncron processed // break; case "put_config_response": // // successful transferred to NETLink // break; case "read_response": xmlVariables = responseTXT; showS7Variables(xmlVariables); break; case "wlan_config_response": xmlVariables = responseTXT; showWlanConfig(xmlVariables); break; case "diagnostic_response": xmlVariables = responseTXT; showDiagnosticInformation(xmlVariables); break; case "lifelist_response": xmlVariables = responseTXT; showLifelistResponse(xmlVariables); break; case "state_response": // get the state info from the response xml stream NETLinkElement = getElement(responseTXT, "response"); state_no = getAttribute(NETLinkElement, "state_no"); state_text = getStateText(parseInt(state_no, 10)); if (ajax_object != null && ajax_object.cbState != null) { ajax_object.cbState(state_text); // call user callback function } break; default:; if (ajax_object != null && ajax_object.cbState != null) { ajax_object.cbState("not_available"); // call user callback function } } bWaitForResponse = false; // transfer ready } /** */ function getStateText(state_no) { var state_text; switch(state_no) { case NETLINK_NOT_AVAILABLE: state_text = "not_available"; break; case NETLINK_READY: state_text = "ready"; break; case SAVE_WLAN_PARAMETER_OK: state_text = "save_ok"; break; case SAVE_WLAN_PARAMETER_FAILED: state_text = "save_failed"; break; default:; state_text = "not_available"; } // END switch return state_text; } /** */ function getXMLHttpRequest() { if (window.XMLHttpRequest) { //XMLHttpRequest Firefox, Opera, Safari, ... isIE = false; return new XMLHttpRequest(); } else { if (window.ActiveXObject) { try { //XMLHTTP (neu) Internet Explorer return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { //XMLHTTP (alt) Internet Explorer return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return null; } } } } return false; } /** */ function getElement(xmlBuffer, pElement) { var element; var elementBegin; var elementEnd; element = "<" + pElement; elementBegin = xmlBuffer.indexOf(element); if (elementBegin == -1){ // check if valid element begin return ""; // not found } element = ""; } /** */ function getElementContent(xmlBuffer, pElement) { var element; var elementBegin; var elementEnd; element = "<" + pElement; elementBegin = xmlBuffer.indexOf(element); if (elementBegin == -1){ // check if valid element begin return ""; // not found } elementBegin = xmlBuffer.indexOf(">", elementBegin); // search end of element name element = "", elementBegin); if (tagDelimiter == -1) tagDelimiter = buffer_len; if (spaceDelimiter < tabDelimiter) elementEnd = spaceDelimiter; else elementEnd = tabDelimiter; if (elementEnd > nlDelimiter) elementEnd = nlDelimiter; if (elementEnd > tagDelimiter) elementEnd = tagDelimiter; var currElementName = xmlBuffer.substr(elementBegin+1, elementEnd - elementBegin -1); element_b = "<" + currElementName; element_e = ""; } else break; if (pElement == "*") { element_b = "<"; elementEnd++; } elementBegin = xmlBuffer.indexOf(element_b, elementEnd); } return arElements; // array of elements } // getChildElements() /** */ function getAttribute( pElement, pAttribut) { var offset; var pAttr; var pQuoteBegin; var pQuoteEnd; var retBuffer; if (pElement.length == 0) return ""; // not found offset = 0; pAttr = pElement; do { // search for the requested attribut name pAttr = pAttr.substr(offset); offset = pAttr.indexOf(pAttribut); // alert("pAttr: " + pAttr + " offset:" + offset); if (offset < 0){ return ""; // not found } if (pAttr[offset-1] > ' ') { // char before attribute is no word delimiter offset += pAttribut.length; // point to end of attribut name continue; // go to next attribute } offset += pAttribut.length; // point to end of attribut name // alert("pAttr.charAt(offset) :" + pAttr.charAt(offset) + " pAttr.charAt(offset+1) :" + pAttr.charAt(offset+1) + " pAttr.charAt(offset+2) :" + pAttr.charAt(offset+2)); } while((pAttr.charAt(offset) != '=') && // word delimiter for attribut found? (pAttr.charAt(offset) != ' ')); pQuoteBegin = pAttr.indexOf('=',offset); if (pQuoteBegin < 0){ // check equal sign of attribute return ""; // not found } pQuoteBegin = pAttr.indexOf('"',pQuoteBegin); if (pQuoteBegin < 0){ // check first quote of attribute return ""; // not found } pQuoteBegin++; // value right after quote pQuoteEnd = pAttr.indexOf( '"', pQuoteBegin); if (pQuoteEnd < 0 ) { // check end quote of attribute return ""; // not found } retBuffer = pAttr.substr(pQuoteBegin, pQuoteEnd - pQuoteBegin); return retBuffer; } function createStateResponse(state_no) { var response; //debugger; response = "\n" + "\n" + "\n" + "\n" + ""; return response; } /** */ function getNodeName(Node) { var elementBegin; var elementEnd; var endTag; var NodeName = ""; elementBegin = Node.indexOf("<", 0); endTag = Node.indexOf(">", elementBegin); elementEnd = Node.search(/\s/); // search next white space if (elementEnd == -1 || elementEnd > endTag) { elementEnd = endTag; } NodeName = Node.substr(elementBegin+1, elementEnd - elementBegin -1); return NodeName; } function doWait() { var x = document.getElementById("button_save_id"); x.style.cursor = "wait"; } function doNoWait() { // var x = document.getElementsByTagName( "body" )[0]; x.style.cursor = "auto"; var x = document.getElementById("button_save_id"); x.style.cursor = "auto"; } function setTraceEntry(entry) { traceBuffer[trace_index++] = entry; trace_index = trace_index % MAX_ENTRIES; } /*************************************************** functions from other authors **************************************************/ // xp_progressbar // Copyright 2004 Brian Gosselin of ScriptAsylum.com // // v1.0 - Initial release // v1.1 - Added ability to pause the scrolling action (requires you to assign // the bar to a unique arbitrary variable). // - Added ability to specify an action to perform after a x amount of // - bar scrolls. This requires two added arguments. // v1.2 - Added ability to hide/show each bar (requires you to assign the bar // to a unique arbitrary variable). // example calls: // var bar1= createBar(300,15,'white',1,'black','blue',85,7,3,""); // var bar2= createBar(320,15,'white',1,'black','green',85,7,3,"alert('Hi there')"); // var xyz = createBar( // total_width, // total_height, // background_color, // border_width, // border_color, // block_color, // scroll_speed, // block_count, // scroll_count, // action_to_perform_after_scrolled_n_times // ) var w3c=(document.getElementById)?true:false; var ie=(document.all)?true:false; var N=-1; function createBar(w,h,bgc,brdW,brdC,blkC,speed,blocks,count,action) { if(ie||w3c){ var t='
'; t+=''; for(i=0;it.w){ t.style.left=-(t.h*2+1)+'px'; t.ctr++; if(t.ctr>=t.count){ eval(t.action); t.ctr=0; }}else t.style.left=(parseInt(t.style.left)+t.h+1)+'px'; } /* Basic idea from: Author: Matt Kruse WWW: http://www.mattkruse.com/ */ // Fill the window with contents function PopupWindow_populate(contents) { this.contents = contents; this.populated = false; } // Refresh the displayed contents of the popup function PopupWindow_refresh() { document.getElementById(this.divName).innerHTML = this.contents; } // Position and show the popup, relative to an anchor object function showPopup() { if (!this.visible && ( this.contents != "")) { this.refresh(); this.x = this.mouseX; this.y = this.mouseY; this.x += this.offsetX; this.y += this.offsetY; // Show the DIV object document.getElementById(this.divName).style.left = this.x + "px"; document.getElementById(this.divName).style.top = this.y + "px"; document.getElementById(this.divName).style.visibility = "visible"; this.visible = true; } } function PopupWindow_Move(ev) { var mouseposX; var mouseposY; if (ev) { mouseposX = ev.pageX ? ev.pageX : ev.clientX; mouseposY = ev.pageY ? ev.pageY : ev.clientY; } else { ev = window.event; /* coordinaten in Bezug auf ein Element mouseposX = window.event.offsetX; mouseposY = window.event.offsetY; */ mouseposX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; mouseposY = ev.clientY + document.body.scrollTop - document.body.clientTop; } g_PopupWindow.mouseX = mouseposX; g_PopupWindow.mouseY = mouseposY; } // Hide the popup function hidePopup() { document.getElementById(g_PopupWindow.divName).style.visibility = "hidden"; g_PopupWindow.visible = false; } // CONSTRUCTOR for the PopupWindow object // Pass it a DIV name to use a DHTML popup. function PopupWindow(divName) { this.divName = divName; this.popupWindow = null; this.visible = false; this.contents = ""; this.divName = divName; this.offsetX = 0; this.offsetY = 0; this.mouseX = 0; this.mouseY = 0; // Method mappings this.populate = PopupWindow_populate; this.refresh = PopupWindow_refresh; this.showPopup = showPopup; // this.hidePopup = hidePopup; this.docMove = PopupWindow_Move; if (document.addEventListener) { document.addEventListener("mousemove", this.docMove, true); } else { // IE document.body.onmousemove = PopupWindow_Move; } } /* ** Translation Table as described in RFC1113 */ var cb64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* ** Translation Table to decode */ var cd64="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq"; /* ** encodeblock ** ** encode 3 8-bit binary bytes as 4 '6-bit' characters */ function encodeblock( inp, outp, len ) { var index; var cb64_value; index = inp[0] >> 2; outp[0] = cb64.charAt( index ); index = ((inp[0] & 0x03) << 4) | ((inp[1] & 0xf0) >> 4); outp[1] = cb64.charAt( index ); index = ((inp[1] & 0x0f) << 2) | ((inp[2] & 0xc0) >> 6); outp[2] = (len > 1 ? cb64.charAt( index ) : ':'); index = inp[2] & 0x3f ; outp[3] = (len > 2 ? cb64.charAt( index ) : ':'); } /* ** encode ** ** base64 encode a stream adding padding and line breaks as per spec. */ function encode_b64( arInp) { var inp = new Array(3); var outp = new Array(4); var i, len = 0; var ix_inp = 0; var ix_outp = 0; var ar_len = arInp.length; var sOutp sOutp = ""; while( ar_len > ix_inp ) { len = 0; for( i = 0; i < 3; i++ ) { if( ar_len > ix_inp ) { inp[i] = arInp.charCodeAt(ix_inp); len++; } else { inp[i] = 0; } ix_inp++; } if( len ) { encodeblock( inp, outp, len ); for( i = 0; i < 4; i++ ) { if (outp[i].charCodeAt(0) > 0) sOutp += outp[i]; else sOutp += ":"; } } } return sOutp; } /* ** decodeblock ** ** decode 4 '6-bit' characters into 3 8-bit binary bytes */ function decodeblock( inp, outp ) { outp[ 0 ] = (inp[0] << 2 | inp[1] >> 4) & 0xFF; outp[ 1 ] = (inp[1] << 4 | inp[2] >> 2) & 0xFF; outp[ 2 ] = (((inp[2] << 6) & 0xc0) | inp[3]) & 0xFF; } /* ** decode ** ** decode a base64 encoded stream discarding padding, line breaks and noise */ function decode_b64( arInp) { var inp = new Array(4); var outp = new Array(3); var v; var i; var len; var ix_inp = 0; var ix_outp = 0; var ar_len = arInp.length; var sOutp; sOutp = ""; while( ar_len > ix_inp ) { for( len = 0, i = 0; i < 4 && ( ar_len > ix_inp ); i++ ) { v = 0; while( ( ar_len > ix_inp ) && v == 0 ) { v = arInp.charCodeAt(ix_inp++); v = ((v < 43 || v > 122) ? 0 : cd64.charCodeAt( v - 43 )); if( v ) { v = ((v == 36 /*'$'*/) ? 0 : v - 61); } } inp[i] = 0; if ( ar_len >= ix_inp ) { len++; if( v ) { inp[ i ] = (v - 1); } } } if( len ) { decodeblock( inp, outp ); for( i = 0; i < len - 1; i++ ) { if (outp[i] != 0) sOutp += String.fromCharCode(outp[i]); } } } return sOutp; }